/*
 *  txdnet.cn tonydon
 * 
 */
package cn.txdnet.txcms.service;

import cn.txdnet.txcms.dao.InfotagsDAO;
import cn.txdnet.txcms.domain.Infotags;
import cn.txdnet.txcms.dto.TagsDTO;
import cn.txdnet.txweb.basedao.FacadeProxy;
import cn.txdnet.txweb.utils.CollectionUtil;
import cn.txdnet.txweb.utils.StringUtil;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import txdnet.util.StaticMark;

/**
 *
 * @author txdnet
 */
public class InfotagsService {

    /**
     * 批量插入info关联tagid
     *
     * @param infoid
     * @param tagids
     * @return
     */
    public static int insert(Long infoid, String tagids) {
        if (StringUtil.isEmpty(tagids)) {
            return 0;
        }
        int[] tagIdArr = StringUtil.parseStrToIntArray(tagids, StaticMark.STR_LINE);
        List<Infotags> list = new ArrayList<Infotags>(tagIdArr.length);
        for (int tagid : tagIdArr) {
            list.add(new Infotags(infoid, tagid));
        }
        InfotagsDAO dao = FacadeProxy.getManualCommitProxy(InfotagsDAO.class);
        return dao.insert(list);
    }

    /**
     * 批量删除info关联tag
     *
     * @param infoids
     * @return
     */
    public static int delete(String infoids) {
        long[] infoIdArr = StringUtil.parseStrToLongArray(infoids, StaticMark.STR_LINE);
        if (CollectionUtil.arrayIsEmpty(infoIdArr)) {
            return 0;
        }
        InfotagsDAO dao = FacadeProxy.getManualCommitProxy(InfotagsDAO.class);
        return dao.delete(infoIdArr);
    }

    /**
     * 查询info关联tag
     *
     * @param infoid
     * @return
     */
    public static List<?> queryList(long infoid) {
        InfotagsDAO dao = FacadeProxy.getAutoCommitProxy(InfotagsDAO.class);
        return dao.queryList(infoid);
    }

    /**
     * 前台查询info 关联的tags
     * @param infoid
     * @return 
     */
    public static List<TagsDTO> queryInfoTagsForView(Long infoid) {
        List<Long> idList = new ArrayList<Long>(1);
        idList.add(infoid);
        return FacadeProxy.getAutoCommitProxy(InfotagsDAO.class).queryInfoTagsForView(idList);
    }

    /**
     * 更新info关联tagid
     *
     * @param infoid
     * @param newTagids
     * @return
     */
    public static int update(long infoid, String newTagids) {
        if (StringUtil.isEmpty(newTagids)) {
            return 0;
        }
        int[] newTagidArr = StringUtil.parseStrToIntArray(newTagids, StaticMark.STR_LINE);
        if (CollectionUtil.arrayIsEmpty(newTagidArr)) {
            return 0;
        }
        InfotagsDAO queryDao = FacadeProxy.getAutoCommitProxy(InfotagsDAO.class);
        List<?> oldTagidList = queryDao.queryTagidList(infoid);
        if (CollectionUtil.isEmpty(oldTagidList)) {
            oldTagidList = Collections.emptyList();
        }
        // 是否需要重新插入标签，之前的关联会全部删除
        boolean needReInsertTag = false;
        for (Integer tagid : newTagidArr) {
            if (!oldTagidList.contains(tagid)) {
                needReInsertTag = true;
                break;
            }
        }
        if (newTagidArr.length != oldTagidList.size()) {
            needReInsertTag = true;
        }
        if (needReInsertTag) {
            InfotagsDAO updateDao = FacadeProxy.getManualCommitProxy(InfotagsDAO.class);
            List<Infotags> list = new ArrayList<Infotags>(newTagidArr.length);
            for (int tagid : newTagidArr) {
                list.add(new Infotags(infoid, tagid));
            }
            return updateDao.update(infoid, list, oldTagidList);
        }
        return 0;
    }
}
